其他
.NET 如何创建漂亮的控制台程序
前言
你是否厌倦了控制台应用程序默认的简陋界面?
这时,你可以试试引用Nuget包Spectre.Console
。
打印使用帮助
首先,我们可以设置控制台应用程序可以执行的命令:
static async Task<int> Main(string[] args)
{
var app = new CommandApp();
app.Configure(config =>
{
config.AddCommand<DemoCommand>("demo");
config.AddCommand<AnotherCommand>("another");
});
return await app.RunAsync(args);
}
然后,为每个命令指定参数:
public class DemoCommandSettings : CommandSettings
{
[CommandOption("-u|--username")]
[Description("需要显示的名称")]
public string Name { get; set; }
}
最后,实现命令:
public class DemoCommand : AsyncCommand<DemoCommandSettings>
{
public override Task<int> ExecuteAsync(CommandContext context, DemoCommandSettings settings)
{
Console.WriteLine($@"Hello {settings.Name}!");
return Task.FromResult(0);
}
}
可以看到,Spectre.Console自动生成了帮助信息,指导用户如何使用。
与用户交互
我们还可以运行命令时询问用户,进行一定的交互输入:
var name =settings.Name?? AnsiConsole.Ask<string>("What's your [green]name[/]?");
Console.WriteLine($@"Hello {name}!");
显示信息
当我们从用户那里收集完信息后,可以让用户检查信息,以确保所有信息输入正确。例如,我们可以以表格格式呈现摘要:
do
{
name = AnsiConsole.Ask<string>("What's your [green]name[/]?");
var table = new Table();
table.AddColumn("参数");
table.AddColumn(new TableColumn("值").Centered());
table.AddRow("-u", $@"[green]{name}[/]");
AnsiConsole.Write(table);
} while (!AnsiConsole.Confirm("输入是否正确?"));
报告进度
在执行命令时,可以显示进度来告诉用户工作完成的百分比:
await AnsiConsole.Progress()
.StartAsync(async ctx =>
{
var task1 = ctx.AddTask("执行中......");
while (!ctx.IsFinished)
{
// 模拟工作耗时
await Task.Delay(100);
task1.Increment(1);
}
});
结论
正如我在开始时提到的,使用Spectre.Console可以创建出漂亮的控制台应用程序,更多功能请参看官方文档:https://spectreconsole.net/
- EOF -
看完本文有收获?请转发分享给更多人
推荐关注「DotNet」,提升.Net技能
点赞和在看就是最大的支持❤️